#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

sem_t sem;

void *goto_bathroom(void *args) {
	int thread_num = *((int *)args);
	printf("线程 %d 请求坑位中...\n", thread_num);
	fflush(stdout);
	sem_wait(&sem);
	printf("线程 %d 正在蹲坑\n", thread_num);
	fflush(stdout);
	// 模拟上厕所需要的时间，随机 0~3 s
	sleep(rand() % 3); 
	sem_post(&sem);
	printf("线程 %d 使用坑位完毕，离开坑位\n", thread_num);
	fflush(stdout);
}

int main() {
	// 初始化信号量，2 个坑位对应着 2 个信号量的值
	sem_init(&sem, 0, 2);
	
	// 创建 6 个线程，去抢坑位
	pthread_t tds[6];
	int i;
	for (i = 0; i < 6; ++i) {
		pthread_create(&tds[i], NULL, goto_bathroom, &i);
	}
	
	sleep(10000);
	sem_destory(&sem);
	return 1;
}


